package main

type ListNode struct {
	Val  int
	Next *ListNode
}

func EntryNodeOfLoop(pHead *ListNode) *ListNode {
	ptr1, ptr2 := pHead, pHead
	for {
		if ptr2 == nil || ptr2.Next == nil {
			return nil
		}
		ptr2 = ptr2.Next.Next
		ptr1 = ptr1.Next
		if ptr1 == ptr2 {
			break
		}
	}
	for ptr2 = pHead; ptr1 != ptr2; {
		ptr2 = ptr2.Next
		ptr1 = ptr1.Next
	}
	return ptr1
}
